/*
 * @Author: LMN
 * @Title: 接口配置主文件
 * @LastEditors: LMN
 * @Description: file content
 * @Date: 2019-03-14 11:10:45
 * @LastEditTime: 2019-06-25 19:28:39
 */
import axios from 'axios'

// 原apis数据已经移至pubilc/Config.js中，注意前往修改
// 原apis数据已经移至pubilc/Config.js中，注意前往修改
// 原apis数据已经移至pubilc/Config.js中，注意前往修改
// 原apis数据已经移至pubilc/Config.js中，注意前往修改
// 原apis数据已经移至pubilc/Config.js中，注意前往修改
// 原apis数据已经移至pubilc/Config.js中，注意前往修改

/**
 * 返回接口函数
 * 可在vue界面中通过this.$http(get||post, key, params)调用
 */
export default (type, key, param = {}) => {
  // 用Promise提前处理接口是否请求成功
  const promise = new Promise((resolve, reject) => {
    // 判断请求方式是否有效
    if (type !== 'get' && type !== 'post') reject('请求方式必须为get或者post')
    // 判断是否包含有效接口
    if (!CONFIG.apis[key]) reject('接口名不存在')
    // 执行请求
    let api = CONFIG.apis[key]
    let url = api[api[2] || api[2] === 0 ? api[2] : CONFIG.api] || api[0]
    // 如果走静态json自动type为get，并且不挂参数
    if (url.slice(-5).toLowerCase() === '.json') {
      type = 'get'
      param = null
    }
    axios({
      // `method` 是创建请求时使用的方法
      method: type,
      // `url` 是用于请求的服务器 URL
      url,
      // `params` 是即将与请求一起发送的 URL 参数 type为get
      params: type === 'get' ? param : null,
      // `data` 是作为请求主体被发送的数据 type为post
      data: type === 'post' ? param : null,
      // `withCredentials` 表示跨域请求时是否需要使用凭证
      withCredentials: true,
      // `headers` 是即将被发送的自定义请求头
      headers: { 'Content-Type': 'application/json;charset=utf-8' }
    })
      .then(res => {
        // 接口请求成功,预处理是否有数据
        if (res.data.status === 'success') {
          // 接口标识为成功，直接返回数据
          resolve(res.data.data)
        } else {
          // 接口标识为失败，直接返回catch
          const info = '数据请求异常'
          reject(res.data.data || info)
        }
      })
      .catch(error => {
        // 接口请求失败，直接返回catch
        reject(error)
      })
  })
  return promise
}
